// 用户模块的store，后期自己实现
import { reqGetUserInfo, reqLogin, reqGetUserDetailById } from '@/api/user'
import { setToken, getToken, removeToken } from '@/utils/auth'
const state = {
  token: getToken() || null, // token字符串
  userInfo: {} // 个人信息
}

const mutations = {
  setToken(state, payload) {
    state.token = payload
    // 存储在web存储(localStorage和sessionStorage)
    // 将token持久化存储在cookie中
    setToken(payload)
  },
  setUserInfo(state, payload) {
    state.userInfo = payload
  },
  removeUserInfoToken(state) {
    state.userInfo = {}
  },
  removeToken(state) {
    state.token = null // 清除vuex中
    removeToken() // 清除本地
  }
}
const actions = {
  async login({ commit }, userInfo) {
    // 在这个action发送登录的请求
    const res = await reqLogin(userInfo)
    console.log(res)
    // 触发setToken这个mutation
    commit('setToken', res.data)
    // 这个return 是保证login.vue文件中接收响应结果，页面弹框提示
    return res
  },
  // 获取个人信息的action
  async getUserInfo({ commit }) {
    // 发送请求
    const { data } = await reqGetUserInfo()
    const { data: data2 } = await reqGetUserDetailById(data.userId) // 员工详细信息 这个结果是包含第一个的结果的
    // 再去提交存储个人信息的mutation
    // console.log(data2)
    const result = { ...data, ...data2 }
    commit('setUserInfo', result)
    return result // 将这个res return出来 后期要做权限处理
  },
  // 提交移除token和个人信息的action
  logout({ commit }) {
    commit('removeUserInfoToken')
    commit('removeToken')
  }
}
const getters = {}

export default {
  // 开启命令空间
  namespaced: true,
  state,
  actions,
  mutations,
  getters
}
